如果只顯示最後的清理後資料,使用者可能不知道哪些資料曾經被修改。
因此今天加入「資料清理變更紀錄」,讓系統記錄每一筆被修改的資料。
一、建立變更紀錄列
首先建立$changes:$changes = [];
這個陣列會用來儲存每次資料清理的結果。
每筆變更會記錄:Patient ID、被修改的欄位、原始資料、清理後資料
二、紀錄缺失值的處理
例如P002的gender原本是空白。
在清理資料的同時,加入變更紀錄:
if ($header[$index] === 'gender') {
$cleanedRow[$index] = 'Unknown';
$changes[] = [
'patient_id' => $row[0],
'field' => $header[$index],
'original' => $value,
'cleaned' => 'Unknown'
];
}
這樣系統就會記住:P002|gender|原始:空白|清理後:Unknown
三、紀錄格式標準化
性別格式不一致時,例如P003的男性,系統會將它統一成「男」。
除了修改資料之外,也加入變更紀錄:
$changes[] = [
'patient_id' => $row[0],
'field' => 'gender',
'original' => $row[2],
'cleaned' => '男'
];
$cleanedRow[2] = '男';
因此使用者可以知道原本的資料是什麼,以及系統修改成什麼。
四、紀錄日期格式的變更
日期格式也使用相同的方式。
例如 2026/09/05 會被標準化成 2026-09-05
程式如下:
$changes[] = [
'patient_id' => $row[0],
'field' => 'visit_date',
'original' => $row[8],
'cleaned' => $standardDate
];
$cleanedRow[8] = $standardDate;
五、紀錄數值異常的處理
例如 age = -5:
$changes[] = [
'patient_id' => $row[0],
'field' => 'age',
'original' => $row[1],
'cleaned' => 'Unknown'
];
$cleanedRow[1] = 'Unknown';
而heart_rate = 999:
$changes[] = [
'patient_id' => $row[0],
'field' => 'heart_rate',
'original' => $row[6],
'cleaned' => 'Unknown'
];
$cleanedRow[6] = 'Unknown';
六、顯示資料清理變更紀錄
完成資料處理後,再把$changes顯示在網頁上。
echo '<h3>資料清理變更紀錄</h3>';
if (count($changes) > 0) {
echo '<table border="1" cellpadding="5">';
echo '<tr>';
echo '<th>Patient ID</th>';
echo '<th>欄位</th>';
echo '<th>原始資料</th>';
echo '<th>清理後資料</th>';
echo '</tr>';
foreach ($changes as $change) {
echo '<tr>';
echo '<td>' . $change['patient_id'] . '</td>';
echo '<td>' . $change['field'] . '</td>';
echo '<td>' . ($change['original'] === '' ? '[空白]' : $change['original']) . '</td>';
echo '<td>' . $change['cleaned'] . '</td>';
echo '</tr>';
}
echo '</table>';
} else {
echo '沒有資料被修改。<br>';
}
這樣系統就會在網頁上顯示所有清理過的資料。
七、執行結果
PatientID 欄位 原始資料 清理後資料
P002 gender [空白] Unknown
P003 gender 男性 男
P004 gender M 男
P009 visit_date 2026/09/05 2026-09-05
P007 age -5 Unknown
P008 heart_rate 999 Unknown